package tp.pr5.mv.window;

import java.awt.FlowLayout;

import tp.pr5.mv.CPU;
import tp.pr5.mv.Instruction;
import tp.pr5.mv.Memory;
import tp.pr5.mv.OperandStack;
import tp.pr5.mv.ProgramCounter;
import tp.pr5.mv.ProgramMV;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class PanelPosValMemoria extends JPanel implements CPU.Observer {
	
	/* Panel que permite escribir una posicion y un valor de la memoria para que el panel write pueda 
	 * escribir esos datos en la memoria de la CPU
	 * */
	private JLabel posicionMemoria;
	private JTextField textoPosMemoria;
	private JLabel valorMemoria;
	private JTextField textoValMemoria;
	
	
	public PanelPosValMemoria() {
		
		super( new FlowLayout() ); 
		init();
		
	}
	
	public void init() {
		
		posicionMemoria = new JLabel("Pos: ");
		add(posicionMemoria);
		
		textoPosMemoria = new JTextField();
		textoPosMemoria.setEditable(true);
		textoPosMemoria.setColumns(5);
		add(textoPosMemoria);
		
		valorMemoria = new JLabel("Val: ");
		add(valorMemoria);
		
		textoValMemoria = new JTextField();
		textoValMemoria.setEditable(true);
		textoValMemoria.setColumns(5);
		add(textoValMemoria);
		
		
		
	}
	
	// Metodos que devuelven en forma de entero lo que se ha escrito en los campos de texto de posicion y valor 
	
	public int getPosField() {
		
		return Integer.parseInt(textoPosMemoria.getText());
		
	}
	
	public int getValField() {
		
		return Integer.parseInt(textoValMemoria.getText());
		
	}

	@Override
	public void onStartInstrExecution(Instruction ins) {}

	@Override
	public void onEndInstrExecution(Instruction instr, Memory mem,
			OperandStack stack, ProgramCounter pc) {}

	@Override
	public void onHalt() {}

	@Override
	public void onReset(ProgramMV program) {}

	@Override
	public void onStartRun() { // Desactiva los JTextField
		textoPosMemoria.setEnabled(false);
		textoValMemoria.setEnabled(false);
	}

	@Override
	public void onEndRun(boolean aborted) {
		textoPosMemoria.setEnabled(true);
		textoValMemoria.setEnabled(true);
	}

	@Override
	public void onTrap(Instruction instr, String trapMessage) {}
	
}
